let JsonConfigFile = require('../utils/JsonConfigFile.js');
let serverconfig = File.readFrom('./server.properties');
let Levelname = /level-name=(.*)/.exec(serverconfig)[1].trim();   //获取存档名
let BDSPort = Number(/server-port=(.*)/.exec(serverconfig)[1]);

let defaultConfig = {
  "CONFIG": "此为Websocket客户端配置文件",
  // Websocket网络
  "Websocket": {
      "ConnectUrl": "ws://127.0.0.1:9001",  // 要连接的Websocket地址（优先局域网地址）
      "ConnectKey": "FlySteve",             // 连接密钥，暂时没用
      "ServerName": Levelname,              // BDS名称 （默认为存档名） & 提示信息前缀
      "SendJsonTimeout": 3000,              // 发送json超时时间
      "BDSUuid": utils.uuidv4(),            // BDS唯一识别名（每个服务器一个, 不能重复, 不可擅自修改"）
      "BDSIp": getPublicIP(),               // 此BDS的公网IP地址
      "BDSPort": BDSPort,                   // 此BDS的公网端口
      "Debug": false,
  },
  
  // 聊天配置
  "Chat": {
      "ConsoleDisplay": true,           // WS控制台聊天显示
      "ConsoleDisplayLocal": true       // WS控制台是否显示本服玩家的聊天
  },

  // 个性化配置
  "PersonalConfig":{
      "EnableFakeList": false,            // 启用虚假玩家列表
      "TransferShowPlayersNum": true,    // 传送表单显示玩家数量
      "TransferShowTps": true,           // 传送表单显示Tps
  },
 
  // 玩家数据同步配置
  "SyncConfig":{
      "Enabled": true,                            // 同步功能总开关
      "SyncType": 'sub',                          // 同步类型, 用于玩家数据同步, 副服: 'sub' 主服: 'main', 玩家数据以主服数据为准。
      "AutoSyncCycle": 30000,                     // 自动同步周期(ms)
      "AllowCreateNewPlayer": false,              // 是否允许存档新建玩家（关闭则新玩家从副服登录时将自动传送到主服）
      "SyncReceiveOption":{
          "syncChat": true,                       // 接收跨服聊天
          "syncInventory": true,                  // 接收跨服背包（非实时同步）
          "syncLLMoney": true,                    // 接收跨服LLMoney（实时同步）
          "syncScoreboard": [],                   // 接收跨服计分板（非实时同步）填入想要同步的计分项
          "syncTags": true,                       // 接收跨服Tag
          "syncEnderChest": true,                 // 接收跨服末影箱
          "syncLevel": true,                      // 接收跨服经验等级
          "syncEffects": false,                   // 接收跨服药水效果
          "syncAttributes": false,                // 接收跨服玩家属性
          "syncCmd": ["allowlist", "whitelist"]   // 接收同步执行的命令(主服执行，则其他服也同步执行);
      },
      "SyncSendOption": {
          "syncChat": true,                       // 发送跨服聊天
          "syncInventory": true,                  // 发送跨服背包（非实时同步）
          "syncLLMoney": true,                    // 发送跨服LLMoney（实时同步）
          "syncScoreboard": [],                   // 发送跨服计分板（非实时同步）填入想要同步的计分项
          "syncTags": true,                       // 发送跨服Tag
          "syncEnderChest": true,                 // 发送跨服末影箱
          "syncLevel": true,                      // 发送跨服经验等级
          "syncEffects": false,                   // 发送跨服药水效果
          "syncAttributes": false,                // 发送跨服玩家属性
          "syncCmd": ["allowlist", "whitelist"]   // 发送同步执行的命令(主服执行，则其他服也同步执行);
      }
  }
};

global.CONF = {
  CONFIG: new JsonConfigFile('./plugins/CoordinationWsc/data/WSClientConfig.json', JSON.stringify(defaultConfig))
};

global.VERSION = JSON.parse(File.readFrom('./plugins/CoordinationWsc/manifest.json')).version.split('.').map(n=>Number(n));

function getPublicIP() {
    const os = require("os");
    const ifaces = os.networkInterfaces();
    let en0;
  
    Object.keys(ifaces).forEach((ifname) => {
      let alias = 0;
  
      ifaces[ifname].forEach(function (iface) {
        if ("IPv4" !== iface.family || iface.internal !== false) {
          // skip over internal (i.e. 127.0.0.1) and non-ipv4 addresses
          return;
        }
  
        if (alias >= 1) {
          // this single interface has multiple ipv4 addresses
          en0 = iface.address;
          //console.log(ifname + ":" + alias, iface.address);
        } else {
          // this interface has only one ipv4 adress
          //console.log(ifname, iface.address);
          en0 = iface.address;
        }
        ++alias;
      });
    });
    return en0;
}